Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate the Shopper Renew Subscription E2E test to Playwright #10144

Merged

Conversation

eduardoumpierre
Copy link
Contributor

Fixes #10084

Changes proposed in this Pull Request

This PR aims to migrate the "Subscriptions > Renew a subscription in my account" spec to Playwright, removing the corresponding test from the Puppeteer test suite.

Testing instructions

  • Checkout to this branch
  • Reset your E2E setup by running: npm run test:e2e-reset
  • Setup it again by running the setup script: npm run test:e2e-setup
  • Run the E2E spec: npm run test:e2e-pw shopper-myaccount-renew-subscription
    • You can run it a few times to make sure that the subscription customer is being deleted

  • Run npm run changelog to add a changelog file, choose patch to leave it empty if the change is not significant. You can add multiple changelog files in one PR by running this command a few times.
  • Covered with tests (or have a good reason not to test in description ☝️)
  • Tested on mobile (or does not apply)

Post merge

await navigation.goToSubscriptions( page );

if ( ! subscriptionId ) {
throw new Error( 'Subscription ID is not set' );
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added this throw to provide a better error in case the previous test fails. We can remove it if not desired.

export const shouldRunSubscriptionsTests =
process.env.SKIP_WC_SUBSCRIPTIONS_TESTS !== '1';

export const products = {
Copy link
Contributor Author

@eduardoumpierre eduardoumpierre Jan 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm unsure about the names of those constants. I wanted to use SHOULD_RUN_SUBSCRIPTIONS_TESTS and PRODUCTS, but since ESLint flagged it, I opted to keep both in lower camel case for now.

@botwoo
Copy link
Collaborator

botwoo commented Jan 13, 2025

Test the build

Option 1. Jetpack Beta

  • Install and activate Jetpack Beta.
  • Use this build by searching for PR number 10144 or branch name dev/10084-shopper-myaccount-renew-subscription-e2e-test in your-test.site/wp-admin/admin.php?page=jetpack-beta&plugin=woocommerce-payments

Option 2. Jurassic Ninja - available for logged-in A12s

🚀 Launch a JN site with this branch 🚀

ℹ️ Install this Tampermonkey script to get more options.


Build info:

  • Latest commit: f8685fb
  • Build time: 2025-01-14 11:58:11 UTC

Note: the build is updated when a new commit is pushed to this PR.

Copy link
Contributor

github-actions bot commented Jan 13, 2025

Size Change: 0 B

Total Size: 1.36 MB

ℹ️ View Unchanged
Filename Size
release/woocommerce-payments/assets/css/admin.css 1.37 kB
release/woocommerce-payments/assets/css/admin.rtl.css 1.37 kB
release/woocommerce-payments/assets/css/success.css 182 B
release/woocommerce-payments/assets/css/success.rtl.css 184 B
release/woocommerce-payments/dist/blocks-checkout-rtl.css 2.64 kB
release/woocommerce-payments/dist/blocks-checkout.css 2.64 kB
release/woocommerce-payments/dist/blocks-checkout.js 55.6 kB
release/woocommerce-payments/dist/cart-block.js 17.2 kB
release/woocommerce-payments/dist/cart.js 5.73 kB
release/woocommerce-payments/dist/checkout-rtl.css 1.13 kB
release/woocommerce-payments/dist/checkout.css 1.13 kB
release/woocommerce-payments/dist/checkout.js 33.6 kB
release/woocommerce-payments/dist/express-checkout-rtl.css 229 B
release/woocommerce-payments/dist/express-checkout.css 229 B
release/woocommerce-payments/dist/express-checkout.js 15.7 kB
release/woocommerce-payments/dist/frontend-tracks.js 854 B
release/woocommerce-payments/dist/index-rtl.css 39.3 kB
release/woocommerce-payments/dist/index.css 39.3 kB
release/woocommerce-payments/dist/index.js 301 kB
release/woocommerce-payments/dist/multi-currency-analytics.js 1.08 kB
release/woocommerce-payments/dist/multi-currency-rtl.css 4.47 kB
release/woocommerce-payments/dist/multi-currency-switcher-block.js 60.9 kB
release/woocommerce-payments/dist/multi-currency.css 4.47 kB
release/woocommerce-payments/dist/multi-currency.js 57.6 kB
release/woocommerce-payments/dist/order-rtl.css 730 B
release/woocommerce-payments/dist/order.css 730 B
release/woocommerce-payments/dist/order.js 42.3 kB
release/woocommerce-payments/dist/payment-gateways-rtl.css 1.33 kB
release/woocommerce-payments/dist/payment-gateways.css 1.33 kB
release/woocommerce-payments/dist/payment-gateways.js 38.7 kB
release/woocommerce-payments/dist/plugins-page-rtl.css 386 B
release/woocommerce-payments/dist/plugins-page.css 386 B
release/woocommerce-payments/dist/plugins-page.js 20.1 kB
release/woocommerce-payments/dist/product-details-rtl.css 433 B
release/woocommerce-payments/dist/product-details.css 436 B
release/woocommerce-payments/dist/product-details.js 12.5 kB
release/woocommerce-payments/dist/settings-rtl.css 11.6 kB
release/woocommerce-payments/dist/settings.css 11.5 kB
release/woocommerce-payments/dist/settings.js 224 kB
release/woocommerce-payments/dist/subscription-edit-page.js 703 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal-rtl.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.css 524 B
release/woocommerce-payments/dist/subscription-product-onboarding-modal.js 20.2 kB
release/woocommerce-payments/dist/subscription-product-onboarding-toast.js 730 B
release/woocommerce-payments/dist/subscriptions-empty-state-rtl.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.css 120 B
release/woocommerce-payments/dist/subscriptions-empty-state.js 19.3 kB
release/woocommerce-payments/dist/tokenized-express-checkout-rtl.css 229 B
release/woocommerce-payments/dist/tokenized-express-checkout.css 229 B
release/woocommerce-payments/dist/tokenized-express-checkout.js 16.6 kB
release/woocommerce-payments/dist/tos-rtl.css 235 B
release/woocommerce-payments/dist/tos.css 235 B
release/woocommerce-payments/dist/tos.js 21.8 kB
release/woocommerce-payments/dist/woopay-direct-checkout.js 6.13 kB
release/woocommerce-payments/dist/woopay-express-button.js 25 kB
release/woocommerce-payments/dist/woopay-rtl.css 4.31 kB
release/woocommerce-payments/dist/woopay.css 4.28 kB
release/woocommerce-payments/dist/woopay.js 71 kB
release/woocommerce-payments/includes/subscriptions/assets/css/plugin-page.css 625 B
release/woocommerce-payments/includes/subscriptions/assets/js/plugin-page.js 814 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/i18n-loader.js 2.46 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/build/jetpack-script-data.js 772 B
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/i18n-loader.js 1.02 kB
release/woocommerce-payments/vendor/automattic/jetpack-assets/src/js/script-data.js 69 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/babel.config.js 163 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.js 14.2 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/identity-crisis.rtl.css 2.47 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.css 10 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.js 28.4 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-connection.rtl.css 10 kB
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.js 280 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-admin-create-user.rtl.css 198 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.css 625 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.js 333 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-login.rtl.css 626 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/jetpack-sso-users.js 424 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-ajax.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/dist/tracks-callables.js 585 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.css 215 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-admin-create-user.js 521 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.css 721 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-login.js 412 B
release/woocommerce-payments/vendor/automattic/jetpack-connection/src/sso/jetpack-sso-users.js 632 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/about.css 1.04 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-empty-state.css 294 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin-order-statuses.css 408 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/admin.css 3.59 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/checkout.css 301 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/modal.css 746 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/view-subscription.css 574 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/css/wcs-upgrade.css 414 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin-pointers.js 543 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/admin.js 9.4 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.js 6.78 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/jstz.min.js 3.84 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-coupon.js 545 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/meta-boxes-subscription.js 2.52 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.js 22.2 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/moment.min.js 11.7 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/payment-method-restrictions.js 1.29 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/admin/wcs-meta-boxes-order.js 507 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/payment-methods.js 358 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/single-product.js 428 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/view-subscription.js 1.38 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/frontend/wcs-cart.js 782 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/modal.js 1.09 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/assets/js/wcs-upgrade.js 1.26 kB
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.css 391 B
release/woocommerce-payments/vendor/woocommerce/subscriptions-core/build/index.js 3.04 kB

compressed-size-action

* @param {string} emailAddress Customer user account email address.
* @return {Promise<void>}
*/
export const deleteCustomerByEmailAddress = async ( emailAddress: string ) => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I spent quite some time troubleshooting this issue. I initially tried using the function from WC's test utils, which is used by the Puppeteer tests, but consistently encountered the following error:

Error: Configuration property "url" is not defined

    at Config.get (/woopayments/node_modules/@woocommerce/e2e-utils/node_modules/config/lib/config.js:182:11)
    at Object.<anonymous> (/Users/ronrennick/Sites/solaris/woocommerce/packages/js/e2e-utils/src/factories.js:8:23)
    at Object.<anonymous> (/Users/ronrennick/Sites/solaris/woocommerce/packages/js/e2e-utils/src/index.js:8:1)
    at Object.<anonymous> (/woopayments/tests/e2e-pw/specs/shopper/shopper-myaccount-renew-subscription.spec.ts:6:25)

I attempted to resolve this by adding default.json and test.json with the required keys to the e2e-pw/config folder, following the existing pattern, but it didn’t work. After trying multiple approaches without success, I ended up duplicating the original function and modifying it to work on our setup.

let page: Page;

test.beforeAll( async ( { browser }, { project } ) => {
const restApi = new RestAPI( project.use.baseURL );
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're using project.use.baseURL to get the same base URL Playwright is using while running the tests.

@eduardoumpierre eduardoumpierre marked this pull request as ready for review January 13, 2025 22:34
@eduardoumpierre eduardoumpierre requested a review from a team January 13, 2025 22:34
@tpaksu
Copy link
Contributor

tpaksu commented Jan 14, 2025

I've run the tests 3 times, and I'm getting this error:

1) [shopper] › shopper/shopper-myaccount-renew-subscription.spec.ts:52:7 › Subscriptions > Renew a subscription in my account › should be able to renew a subscription in my account 

    Error: Timed out 20000ms waiting for expect(locator).toBeVisible()

    Locator: getByRole('heading', { name: 'Order received' })
    Expected: visible
    Received: hidden
    Call log:
      - expect.toBeVisible with timeout 20000ms
      - waiting for getByRole('heading', { name: 'Order received' })


      74 |                      await expect(
      75 |                              page.getByRole( 'heading', { name: 'Order received' } )
    > 76 |                      ).toBeVisible();
         |                        ^
      77 |              } );
      78 |      }
      79 | );

        at /woopayments/tests/e2e-pw/specs/shopper/shopper-myaccount-renew-subscription.spec.ts:76:6

and the screenshot shows:

image

Maybe that's something wrong with my local setup.

Also I get this warning:

Slow test file: [shopper] › shopper/shopper-myaccount-renew-subscription.spec.ts (36.8s)
  Consider splitting slow test files to speed up parallel execution
  1 failed
    [shopper] › shopper/shopper-myaccount-renew-subscription.spec.ts:52:7 › Subscriptions > Renew a subscription in my account › should be able to renew a subscription in my account 
  3 passed (44.3s)

@eduardoumpierre
Copy link
Contributor Author

eduardoumpierre commented Jan 14, 2025

Thanks for running the tests, @tpaksu! I’d recommend resetting your E2E environment and running npm run build:client before setting it up again. That might help!

Also I get this warning

Most of the tests get the warning because the whole spec takes more than X seconds (what it considers slow). Unfortunately, in this case, the tests are co-dependent so we couldn't do something like that.

@tpaksu
Copy link
Contributor

tpaksu commented Jan 14, 2025

@eduardoumpierre I've done those as they are mentioned in the testing instructions :) I've also run npm ci to reset the dependencies.

@eduardoumpierre
Copy link
Contributor Author

Thanks for letting me know! I’ll try a different approach to have the checkout form ready for submission.

@eduardoumpierre
Copy link
Contributor Author

@tpaksu I've updated the approach for determining when the checkout form is ready to be submitted in that case (fba0e5d and f8685fb). Could you please give it a try again later? Thank you!

Copy link
Contributor

@tpaksu tpaksu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, the E2E tests on my local also passed, turns out that my site had card testing prevention enabled, which gave the error on my previous comment. Disabling the flag and refreshing the cache let the renewal pass through. But as we talked on Slack, we should better check if the card testing prevention token is being rendered on the renewal checkout page, as it shouldn't be failing. Maybe we can extend the tests to test the card testing prevention tokens too in a different issue.

Thanks for working on this, we can ship it!

Merged via the queue into develop with commit b763f99 Jan 14, 2025
25 checks passed
@eduardoumpierre eduardoumpierre deleted the dev/10084-shopper-myaccount-renew-subscription-e2e-test branch January 14, 2025 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

E2E Playwright Migration: convert shopper-myaccount-renew-subscription spec
3 participants